<?php
/**
* Datei enthält die abstrakte Klasse defaultSite
*
*/


/**
* XTemplate Klasse einbinden
* Wird zum parsen von HTML Files benötigt
*/
include_once("xtemplate.class.php");


/**
* Auth Klasse einbinden
* Wird für die Abfrage der Berechtigungen in der MySQL Datenbank verwendet.
*/
include_once("auth.abstract.php");


/**
* abstract Class defaultSite
* 
* Diese Klasse ist die Schablone aller Site*** Klassen. Sie ist die Mutter Klasse über alle Module!<br>
* Sie implementiert die 3 Haupt Funktionen,welche den entgültigen HTML parsen und ausgeben:<br>
* (Layout&Conent) sowie die Current Session Check Funktion.
* Weiter werden im Konstruktor die benötigten Objekte erstellt.
* Diese Klasse enhält einige wenige Eigenheiten:<br>
* - Sie schreibt vor wie die globalen Template Container heissen müssen.<br>
* --  tmplLayout (layoutStart [, layoutStart.menuBar], layoutEnd)
* --  tmplContent (main)
*
* @access 		protected
* @author		Stefan Blatter
* @version		1.0
* @copyright    	2008
* @license 		http://opensource.org/licenses/gpl-license.php GNU Public License
*/
abstract class defaultSite extends auth{
	/**
	* Pfad zum Modulverzeichnis
	* Das ist das Verzeichnis wo sich alle *.site.php Files mit den Site*** Klassen befinden. <br>
	* <b>MIT abschliessendem "/" !!!</b><br>
	* -example : "mod/"
	* @var string
	*/
	protected $_modPath;
	
	
	/**
	* Pfad zum Modulverzeichnis
	* Das ist das Verzeichnis wo sich alle *.html Files mit Template Containern. <br>
	* <b>MIT abschliessendem "/" !!!</b><br>
	* -example : "template/"
	* @var string
	*/
	protected $_tmplPath;
	
	
	/**
	* Template Objekt für den Content Teil
	* -Wird vom Konstruktor gesetzt.
	* @var XTemplate
	*/
	protected $_tmplContent;
	
	
	/**
	* Template Objekt für den Layout Teil
	* -Wird vom Konstruktor gesetzt.
	* @var XTemplate
	*/
	protected $_tmplLayout;
	
	
	/**
	* Variable die Informationen über die Seite beinhaltet
	*/
	protected $site;
	
	
	/**
	* Konstruktor Funktion
	* 
	*/
	public function defaultSite($siteTitle){
		parent::__construct();
		$this->site = array();
		
		$this->_modPath 	= $this->glob['c']['paths']['modul']."/";
		$this->_tmplPath	= $this->glob['c']['paths']['template']."/";
		$this->_tmplContent	= NULL;
		$this->_tmplLayout	= NULL;
		
		$this->makeGlobalsSecure();
		
		$this->_tmplLayout 	= new XTemplate($this->glob['c']['paths']['template']."/".$this->glob['c']['paths']['standardModul']."/".$this->glob['c']['files']['layout']);
		$this->_tmplContent = new XTemplate($this->_tmplPath.$_REQUEST['modul']."/".$_REQUEST['site'].".template.html");
		
		$this->site['fullTitle'] = $siteTitle." - ".$this->glob['c']['base']['siteName'];
		$this->site['name'] = $this->glob['c']['base']['siteName'];
		$this->site['title'] = $siteTitle;
		
		$this->_tmplLayout->assign("site", $this->site);
	}
	
	
	/** Function makeGlobalsSecure
	* @access			protected
	* @function		- führt für alle übergebenen Variabeln die Funktion addslashesToArray() durch
	*/
	protected function makeGlobalsSecure(){
		$_POST = $this->addslashesToArray($_POST);
		$_GET = $this->addslashesToArray($_GET);
		$_REQUEST = $this->addslashesToArray($_REQUEST);
		$_COOKIE = $this->addslashesToArray($_COOKIE);
		$_SERVER = $this->addslashesToArray($_SERVER);
		if(isset($_SESSION)){
			$_SESSION = $this->addslashesToArray($_SESSION);
		}
	}
	
	
	/** Function addslashesToArray
	* @access			protected
	* @function		- fügt vor gefährlichen Zeichen einen \ ein um das Zeichen zu maskieren
	*/
	protected function addslashesToArray($array){
		$b = array();
		if(is_array($array)){
	        foreach($array as $n=>$v){
	            $b[$n]=$this->addslashesToArray($v);
	        }
	        return $b;
	    }else{
	        return addslashes(htmlspecialchars($array));
	    }
	}
	
	
	/** Function _parseAndOutHeader
	* @access			protected
	* @function		- Gibt den Header der Seite aus und setzt wichtige Variabeln
	*/
	protected function _parseAndOutHeader(){
		$this->_tmplLayout->assign("SESSION", @$_SESSION);
		
		if(isset($_GET['e']) AND is_numeric($_GET['e'])){		// Error handling von anderen Webseiten
			$error = $_GET['e'];
			if($this->glob['m']['errors'][$error] != NULL){
				$this->_tmplLayout->assign("message",$this->glob['m']['errors'][$error]); // Fehlermeldung aus der Datei "messages.inc" holen
				$this->_tmplLayout->parse("layoutStart.message"); // Block für die Fehlermeldung parsen
			}
		}
		
		// Dynamische Texte setzen
		//$this->_tmplLayout->assign("lang",$lang);
		$this->_tmplLayout->parse("layoutStart.menuBar");
		
		$this->_tmplLayout->parse("layoutStart");
		$this->_tmplLayout->out("layoutStart");
	}
	
	
	/** Function _parseAndOutFooter
	* @access			protected
	* @function		- Gibt den Footer der Seite aus
	*/
	protected function _parseAndOutFooter(){
		$this->_tmplLayout->parse("layoutEnd");
		$this->_tmplLayout->out("layoutEnd");
	}
	
	
	/** Function _parseAndOutContent
	* @access			protected
	* @function		- Gibt den Content der Seite aus
	*/
	protected function _parseAndOutContent(){
		$this->_tmplContent->assign("PHP_SELF",$_SERVER['PHP_SELF']);
		$this->_tmplContent->assign("modul",$_REQUEST['modul']);
		$this->_tmplContent->assign("site",$_REQUEST['site']);
		
		$this->_tmplContent->parse("main");
		$this->_tmplContent->out("main");
	}
	
	
	/** Function _getGermanMonthName
	* @access			protected
	* @function		- Gibt den deutschen Namen eines Montats zurück
	*/
	protected function _getGermanMonthName($monthNumber = false){
		if($monthNumber != false AND (is_string($monthNumber) OR is_int($monthNumber))){
			$monthNumbers = array("01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12");
			$monthNames = array("Januar",
								"Februar",
								"Marz",
								"April",
								"Mai",
								"Juni",
								"Juli",
								"August",
								"September",
								"Oktober",
								"November",
								"Dezember"
							);
			$monthName = str_replace($monthNumbers, $monthNames, $monthNumber);
			
			return $monthName;
		} else {
			return "N/A";
		}
	}
}
?>